Semaphores are often used to control access to computing resources. Typically, semaphores are implemented using a software routine that uses a counter. In a multi-core system such a counter is shared between the cores and causes a severe performance penalty as the number of cores increase.